import xlsxPopulate from 'xlsx-populate';
import path from "path";

async function fillAndWriteExcel(templateFilePath, newFilePath, data) {
    try {
        // 读取Excel模板文件
        const workbook = await xlsxPopulate.fromFileAsync(templateFilePath);

        // 获取第一个工作表
        const sheet = workbook.sheet(0);


        // 查找循环开始标记
        const startTagCells = sheet.find("{{#each start}}");

        if (!startTagCells || startTagCells.length === 0) {
            console.error('找不到循环开始标记');
            return;
        }

        // 获取开始标记列的索引
        const startCol = startTagCells[0].columnNumber();

        // 查找循环结束标记
        const endTagCells = sheet.find("{{/each end}}");
        if (!endTagCells || endTagCells.length === 0) {
            console.error('找不到循环结束标记');
            return;
        }

        // 获取开始和结束标记所在的行
        const startRow = startTagCells[0].rowNumber();
        const endRow = endTagCells[0].rowNumber();

        // 清空循环区域的内容
        sheet.range(startRow, startCol, endRow, endTagCells[0].columnNumber()).clear();

        // 获取数据数组
        const dataArray = data.rows;

        // 循环写入数据
        dataArray.forEach((rowData, rowIndex) => {
            // 在循环区域内的每一行，都动态地写入数据，并使用标签
            Object.keys(rowData).forEach((columnName, colIndex) => {
                const cellValue = rowData[columnName];
                const cell = sheet.cell(startRow + rowIndex, startCol + colIndex);
                cell.value(`{{${columnName}}}`);
            });
        });

        // 保存新的Excel文件
        await workbook.toFileAsync(newFilePath);

        console.log(`Excel文件已创建：${newFilePath}`);
    } catch (error) {
        console.error('发生错误：', error);
    }
}


// 要填充的数据
const dataToFill = {
    rows: [
        { name: 'John', age: 30, city: 'New York' },
        { name: 'Alice', age: 25, city: 'San Francisco' },
        // 添加更多行数据...
    ]
};

const fpath = path.resolve(__dirname);

// Excel模板文件路径
 const templateFilePath = fpath+'/template.xlsx';
//
// // 新Excel文件路径
 const newFilePath = fpath+'/newFile.xlsx';
//
// // 填充数据并写入新的Excel文件
 fillAndWriteExcel(templateFilePath, newFilePath, dataToFill);
